package edu.amm.fanal.methods;

import edu.amm.fanal.api.BoundaryProblem;
import edu.amm.fanal.api.Function;

/**
 * Метод решения краевой задачи для обыкновенного дифференциального уравнения.
 * 
 * @author Иванов Илья
 * @since 2013-05-10
 *
 */
public abstract class Method<T extends BoundaryProblem> {
	
	/**
	 * @param problem Краевая задача.
	 * @return Решение задачи, полученное данным методом.
	 */
	public Function solve(T problem) {
		if (problem == null)
			throw new RuntimeException("Не задана задача для решения");
		
		return solveProblem(problem);
	}
	
	/**
	 * @param problem Краевая задача.
	 * @return Решение задачи, полученное данным методом.
	 */
	protected abstract Function solveProblem(T problem);
}